ppc = read_csv(
    here::here("data/participation-per-country.csv"),
    col_types = cols(
        .default = col_double(),
        site = col_character(),
        country = col_character(),
        geo = col_character(),
        four_regions = col_character(),
        eight_regions = col_character(),
        six_regions = col_character(),
        `World bank income group 2017` = col_character()
    )
) %>% 
    filter(usuarios > 200)
glimpse(ppc)
## Rows: 121
## Columns: 21
## $ site                           <chr> "StackOverflow", "StackOverflow", "Sta…
## $ country                        <chr> "Argentina", "Australia", "Austria", "…
## $ PDI                            <dbl> 49, 36, 11, 80, 65, 69, 70, 39, 63, 80…
## $ IDV                            <dbl> 46, 90, 55, 20, 75, 38, 30, 80, 23, 20…
## $ MAS                            <dbl> 56, 61, 79, 55, 54, 49, 40, 52, 28, 66…
## $ UAI                            <dbl> 86, 51, 70, 60, 94, 76, 85, 48, 86, 30…
## $ usuarios                       <dbl> 2798, 12313, 2518, 2558, 4275, 10717, …
## $ responderam_prop               <dbl> 0.5357398, 0.6133355, 0.6310564, 0.392…
## $ perguntaram_prop               <dbl> 0.5210865, 0.5897832, 0.5933280, 0.475…
## $ editaram_prop                  <dbl> 0.09256612, 0.14699911, 0.14932486, 0.…
## $ comentaram_prop                <dbl> 0.25339528, 0.33395598, 0.35027800, 0.…
## $ GNI                            <dbl> NA, 59570, 48160, 840, 44990, 11630, 6…
## $ Internet                       <dbl> 51.0, 79.5, 79.8, 5.0, 78.0, 45.0, 51.…
## $ EPI                            <dbl> 59.02, NA, 63.21, NA, 61.21, 49.96, NA…
## $ geo                            <chr> "arg", "aus", "aut", "bgd", "bel", "br…
## $ four_regions                   <chr> "americas", "asia", "europe", "asia", …
## $ eight_regions                  <chr> "america_south", "east_asia_pacific", …
## $ six_regions                    <chr> "america", "east_asia_pacific", "europ…
## $ Latitude                       <dbl> -34.00000, -25.00000, 47.33333, 24.000…
## $ Longitude                      <dbl> -64.00000, 135.00000, 13.33333, 90.000…
## $ `World bank income group 2017` <chr> "Upper middle income", "High income", …

Estamos interessados na relação entre quanto as pessoas de diferentes países comentam em questões dos outros. A proporção das pessoas do país que comentou nas questões de outros está medido na variável comentaram_prop.

Considerando essa variável, queremos examinar a relação entre ela e o quão hierárquicas são as relações em um país (PDI). Queremos também levar em conta o quanto as pessoas daquele país têm acesso à Internet (Internet) e qual o tamanho da base de dados que detectamos daquele país (usuarios).

Examinando essa relação

Faça uma visualização que usa os princípios de eficácia no projeto de visualizações para facilitar as comparações que você acha que são as mais importantes para entendermos esse contexto.

Bônus: inclua o continente dos países (six_regions) na visualização.

Processo de limpeza dos dados

Vamos verificar um sumário de cada variável.

summary(ppc)
##      site             country               PDI              IDV      
##  Length:121         Length:121         Min.   : 11.00   Min.   : 6.0  
##  Class :character   Class :character   1st Qu.: 40.00   1st Qu.:25.0  
##  Mode  :character   Mode  :character   Median : 63.00   Median :40.0  
##                                        Mean   : 58.75   Mean   :45.4  
##                                        3rd Qu.: 73.00   3rd Qu.:68.0  
##                                        Max.   :104.00   Max.   :91.0  
##                                                                       
##       MAS              UAI           usuarios      responderam_prop
##  Min.   :  5.00   Min.   :  8.0   Min.   :   201   Min.   :0.1212  
##  1st Qu.: 40.00   1st Qu.: 49.0   1st Qu.:   569   1st Qu.:0.2634  
##  Median : 50.00   Median : 69.0   Median :  1294   Median :0.4054  
##  Mean   : 50.11   Mean   : 66.2   Mean   :  4718   Mean   :0.4015  
##  3rd Qu.: 63.00   3rd Qu.: 85.0   3rd Qu.:  3128   3rd Qu.:0.5454  
##  Max.   :110.00   Max.   :112.0   Max.   :130197   Max.   :0.6736  
##                                                                    
##  perguntaram_prop editaram_prop     comentaram_prop        GNI       
##  Min.   :0.1511   Min.   :0.00738   Min.   :0.08654   Min.   :  840  
##  1st Qu.:0.2950   1st Qu.:0.03404   1st Qu.:0.20186   1st Qu.: 6990  
##  Median :0.4460   Median :0.05800   Median :0.25340   Median :14280  
##  Mean   :0.4278   Mean   :0.07187   Mean   :0.25067   Mean   :24448  
##  3rd Qu.:0.5624   3rd Qu.:0.10851   3rd Qu.:0.30574   3rd Qu.:41750  
##  Max.   :0.7255   Max.   :0.18394   Max.   :0.41681   Max.   :98860  
##                                                       NA's   :6      
##     Internet           EPI            geo            four_regions      
##  Min.   :  5.00   Min.   :39.48   Length:121         Length:121        
##  1st Qu.: 42.42   1st Qu.:49.96   Class :character   Class :character  
##  Median : 64.90   Median :53.54   Mode  :character   Mode  :character  
##  Mean   : 59.77   Mean   :55.08                                        
##  3rd Qu.: 79.50   3rd Qu.:59.73                                        
##  Max.   :100.00   Max.   :69.30                                        
##  NA's   :3        NA's   :36                                           
##  eight_regions      six_regions           Latitude        Longitude      
##  Length:121         Length:121         Min.   :-42.00   Min.   :-113.64  
##  Class :character   Class :character   1st Qu.: 14.86   1st Qu.:  -0.40  
##  Mode  :character   Mode  :character   Median : 37.75   Median :  20.00  
##                                        Mean   : 28.99   Mean   :  25.18  
##                                        3rd Qu.: 49.15   3rd Qu.:  70.00  
##                                        Max.   : 64.00   Max.   : 174.00  
##                                        NA's   :3        NA's   :3        
##  World bank income group 2017
##  Length:121                  
##  Class :character            
##  Mode  :character            
##                              
##                              
##                              
## 

Considerando que o conjunto de regiões possui valores não disponíveis, vamos filtrar do nosso conjunto de dados.

ppc <- ppc %>% 
    filter(!is.na(six_regions))

Objetivo

Para investigar a relação entre a proporção de comentários entre países (comentaram_prop) e o nível de hierarquia nas relações de um país (PDI), avaliou-se que a representação mais efetiva é o gráfico de dispersão.

Seguindo o princípio da expressividade e efetividade, foi considerado válido utilizar o canal de cor para representar a variável de regiões six_regions e o canal de tamanho para representar a variável (Internet).

Inserir outra variável neste contexto pode causar poluição visual. Neste caso, foi escolhido utilizar um gráfico iterativo. Neste, representa-se a quantidade da base de usuários daquele país (usuarios) ao aproximar o ponteiro do mouse, além de outras variáveis.

# https://cdr.ibpad.com.br/ggplot2.html
# https://gramener.github.io/visual-vocabulary-vega/#/Correlation/
# https://www.r-graph-gallery.com/bubble_chart_interactive_ggplotly.html

ppc_interactive <- ppc %>%
  mutate(text = paste("Country: ", country, "\nUsers: ", usuarios, "\nInternet: ", Internet, "\nSite: ", site, sep="")) %>%
  
  ggplot(aes( x = comentaram_prop, y = PDI, fill = six_regions, size = Internet, text=text )) +
  geom_point(alpha = 0.65) +
  
  scale_size(range = c(1, 7)) +
  scale_fill_viridis(discrete=TRUE) +
  
  theme( legend.title = element_blank() ) +
  ylab("Proporção de comentários entre países") +
  xlab("Relação hierárquica no país")

ggplotly(ppc_interactive, 
         tooltip="text", 
         dynamicTicks = FALSE,
         originalData = TRUE,
         layerData = TRUE)

Outras formas de ver

Em seguida, faça 5 visualizações que usem as mesmas variáveis e também pontos, mas que sejam menos eficazes que a que você escolheu acima.

Forma

O canal de forma exige bastante cuidado. Para dados com muitas categorias, como abaixo, as formas podem se sobrescrever e dificultar a identificação de cada elemento. O uso de um outro canal poderia ser mais adequado, como por exemplo o canal de cor.

ppc %>%
  ggplot(aes( x = comentaram_prop, y = PDI, shape = six_regions, size = Internet )) +
  geom_point(alpha = 0.65) +
  
  scale_size(range = c(1, 7)) +
  scale_color_viridis(discrete=TRUE) +
  
  ylab("Proporção de comentários entre países") +
  xlab("Relação hierárquica no país")

Valores médios (claros) e extremos (escuros)

Usar tons diferentes facilita a identificação de categorias. Em diversos casos, a paleta de cores escolhida pode confundir o público no momento de analisar os pontos.

ppc %>%
  ggplot(aes( x = comentaram_prop, y = PDI, color = six_regions, size = Internet )) +
  geom_point(alpha = 0.65) +
  scale_colour_hue(h = c(180, 270), na.value = "black") +
  ylab("Proporção de comentários entre países") +
  xlab("Relação hierárquica no país")

Tamanho

O canal de tamanho pode ser utilizado para incluir uma variável contínua. Usar um tamanho pequeno pode impedir de diferenciar, ou mesmo encontrar, pontos específicos, mesmo com a ajuda de outros canais.

ppc %>%
  ggplot(aes( x = comentaram_prop, y = PDI, color = six_regions, alpha = Internet )) +
  geom_point() +
  scale_color_viridis(discrete=TRUE) +

  ylab("Proporção de comentários entre países") +
  xlab("Relação hierárquica no país")

Transparência.

Neste caso, repara-se que a remoção do canal de transparência causa aglomeração de diversos pontos, impedir de visualizar, por exemplo, pontos que estão alinhados.

ppc %>%
  ggplot(aes( x = comentaram_prop, y = PDI, color = six_regions, size = Internet )) +
  geom_point() +
  scale_color_viridis(discrete=TRUE) +

  ylab("Proporção de comentários entre países") +
  xlab("Relação hierárquica no país")

Diversos canais

O uso de diversos canais em um mesmo gráfico precisa de bom senso para não causar poluição visual. Usar os canais de cor e forma para a mesma variável de categoria acaba adicionando um overhead desnecessário para entendimento do gráfico.

ppc %>%
  ggplot(aes( x = comentaram_prop, y = PDI, color = six_regions, shape = six_regions, size = Internet)) +
  geom_point(alpha = 0.65) +
  
  scale_size(range = c(1, 7)) +
  scale_color_viridis(discrete=TRUE) +
  
  ylab("Proporção de comentários entre países") +
  xlab("Relação hierárquica no país")

Conclusão

A utilização dos canais na visualização de dados deve ser avaliada de forma a elimitar o desnecessário para comunicar a mensagem. Os elementos devem ter a função de passar uma informação crítica. Além disso, a visualização precisa ser consistente e apresentar os elementos sem causar ambiguidade.